package com.dhecp.project.system.mapper;

import java.util.List;
import java.util.Map;
import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.project.system.domain.SysUserBindRole;
import com.dhecp.project.system.domain.SysUserInfo;
import org.apache.ibatis.annotations.Param;

/**
 * 用户表 数据层
 * 
 * @author ruoyi
 */
public interface SysUserInfoMapper extends GenericDao<SysUserInfo, String>
{

    /**
     * 验证用户名和密码
     * @param userId
     * @return 实体-UserInfo
     * @author DH-Xxj
     */
    SysUserInfo findByUserIdAndPass(Map<String, Object> params);
    
    /**
     * 验证用户名和密码
     * @param userId
     * @return
     * @author DH-Xxj
     */
    public SysUserInfo checkedUserIdAndPass(@Param("userId") String userId, @Param("userPassWord") String userPassWord);
    
    /**
     * 验证用户名和二级密码
     * @param userId
     * @return
     * @author DH-Xxj
     */
    public SysUserInfo checkedUserIdAndPass2(@Param("userId") String userId, @Param("userPassWord2") String userPassWord2);

    /**
     * 拓展用户登录验证
     * @param params
     * @return String (返回异常提示信息，返回空代表无异常)
     * @author DH-Xxj
     */
    String findUserLoginException(Map<String, Object> params);
    
    /**
     * 根据条件分页查询用户列表
     * 
     * @param params 用户信息
     * @return 用户信息集合信息
     */
    List<SysUserInfo> findUserList(Map<String, Object> params);


    /**
     * 通过用户ID查询用户
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public SysUserInfo findByUserId(@Param("userId") String userId);

    /**
     * 通过用户企业微信ID查询用户信息
     * @param userId 企业微信ID
     * @return 用户对象信息
     */
    List<SysUserInfo> findByWeChatId(@Param("enWeChatId") String enWeChatId);
    
    /**
     * 通过用户编号或用户姓名查询用户信息
     * @param userIdOrUserName
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findByUserIdOrUserName(@Param("userIdOrUserName")  String userIdOrUserName);

    /**
     * 查询用户是否拥有指定角色
     * @param params map对象
     * @return List-UserBindRole
     * @author DH-Xxj
     */
    List<SysUserBindRole> findUserRoleByUserIdAndRoleGuid(Map<String, Object> params);

    /**
     * 查询拥有指定角色的用户列表
     * @param params map对象
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findUserListByRoleGuid(Map<String, Object> params);

    /**
     * 查询指定机构下的用户列表
     * @param params 必要参数：指定机构全路径
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findUserListByOrgPathAll(Map<String, Object> params);

    /**
     * 查询指定机构的管理者列表
     * @param params 必要参数：指定机构全路径
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findManagersAllListByOrgPathAll(Map<String, Object> params);
    
    /**
     * 
     * 查询指定资料文件夹的管理者列表
     * @param guid 必要参数：资料文件夹guid
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findManagersAllListByGuid(Map<String, Object> params);

    /**
     * 按条件查询超级管理员列表
     * @param params
     * @return List-UserInfo
     * @author DH-Xxj
     */
    List<SysUserInfo> findSuperUserList(Map<String, Object> params);

    /**
     * 分配用户角色
     * @param 实体-SysUserBindRole
     * @return
     * @author DH-Xxj
     */
    int insertUserRole(SysUserBindRole userBindRole);

    /**
     * 删除用户角色
     * @param 实体-userBindRole
     * @return
     * @author DH-Xxj
     */
    int deleteUserRole(SysUserBindRole userBindRole);

    /**
     * 删除用户
     * @param 实体-userInfo
     * @return
     * @author DH-Xxj
     */
    int deleteUserByUserId(SysUserInfo userInfo);

    /**
     * 修改用户基础信息
     * @param userInfo
     * @return
     * @author DH-Xxj
     */
    int updateUserBaseInfo(SysUserInfo userInfo);
    
    /**
    *@Description: 修改用户上级
    *@Param: [userInfo]
    *@return: int
    *@Author: hlf
    *@date: 2023-02-23 11:32
    */
    int updateUserLeader(SysUserInfo userInfo);

    /**
     * 修改 始终允许浏览器登录 字段
     * @param userInfo
     * @return
     * @author DH-Xxj
     */
    int updateBrowserLogin(SysUserInfo userInfo);
    
    /**
     * 修改密码
     * @param 实体-userInfo
     * @return
     * @author DH-Xxj
     */
    int updatePassWord(SysUserInfo userInfo);

    /**
     * 修改二级密码
     * @param 实体 - userInfo
     * @return
     * @author DH-Xxj
     */
    int updatePassWord2(SysUserInfo userInfo);

    /**
     * 修改用户皮肤
     * @param 实体-userInfo
     * @return
     * @author DH-Xxj
     */
    int updateSkin(SysUserInfo userInfo);

    /**
     * 修改档案照片
     * @param 实体-userInfo
     * @return
     * @author DH-Xxj
     */
    int updateUserPhoto(SysUserInfo userInfo);

    /**
     * 修改用户头像
     * @param 实体-userInfo
     * @return
     * @author DH-Xxj
     */
    int updateUserPicture(SysUserInfo userInfo);

    /**
     * 通过userid修改机构唯一值(所属部门guid)
     * @param userId 必要参数：用户编号
     * @param organizationid 必要参数：所属部门guid
     * @return
     * @author DH-Xxj
     */
    int updateOrganizationidByUserid(Map<String, Object> params);

    /**
     * 通过userId修改用户姓名
     * @param userId 必要参数：用户编号
     * @param userName 必要参数：用户姓名
     * @return
     * @author DH-Xxj
     */
    int updateUserNameByUserid(Map<String, Object> params);
    
    /**
     * 绑定员工档案信息
     * @param userId 必要参数：用户编号
     * @param daNid  必要参数：档案入职信息nid号
     * @return
     * @author DH-Xxj
     */
    int updateUserDaNid(Map<String, Object> params);

    /**
     * 更新用户表第三方系统同步生成的unionid
     * @param params
     * @return
     */
    int updateUserBySyncUnionId(Map<String, Object> params);


    /**
     * 获取用户角色id
     */
    Map<String, Object> getUserRoleId(@Param("userId") String userId);

    /**
     * 获取用户最高的运营公司
     */
    Map<String, Object> getUserRouteCode(@Param("userId") String userId);

}
